package com.feri.rbacsys.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class AliOssUtil {
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    private static final String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
    private static final String accessKeyId = "LTAI5tM1kdcVRgR73UjpETxM";
    private static final String accessKeySecret = "mYxdY9kC5XCXCi2CTOp6qpU4nfuh8v";
    private static OSS client;
    public static final String BUCKETNAME="javadata168";
    static {
        client=new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 创建存储空间
     * @param name 存储空间的名称*/
    public static void createBucket(String name){
        Bucket bucket=client.createBucket(name);
    }
    /**
     * 上传文件*/
    public static void upload(String objname, InputStream data){
        client.putObject("javadata168",objname,data);
    }
    /**
     * 上传文件
     * @param objname 对象名，文件名 要求唯一
     * @param data 上传的内容，字节数组的形式*/
    public static void upload(String objname, byte[] data){
        upload(objname,new ByteArrayInputStream(data));
    }
    /**
     * 获取访问名称
     * @param objname 对象名
     * @param year 访问链接的有效器*/
    public static String getPath(String objname,int year){
        Calendar calendar=Calendar.getInstance();
        calendar.add(Calendar.YEAR,year);
        return client.generatePresignedUrl(BUCKETNAME,objname,calendar.getTime()).toString();
    }
    public static String getPath(String objname, Date date){
        return client.generatePresignedUrl(BUCKETNAME,objname,date).toString();
    }
    /**
     * 获取存储空间中的对象名*/
    public static List<String> getFileList(){
        ObjectListing listing=client.listObjects(BUCKETNAME);
        List<String> names=new ArrayList<>();
        for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
            names.add(objectSummary.getKey());
        }
        return names;
    }
    /**
     * 删除文件
     * @param objname 对象名*/
    public static void delFile(String objname){
        client.deleteObject("javadata168",objname);
    }

}
